<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 在数组原型上添加 myFilter 方法  filter不改变原数组，产生新数组
    Array.prototype.myFilter = function (cb) {
      // let newarr = []
      // for (let i = 0; i < this.length; i++) {
      //   let  item = this[i];
      //   if (cb(item, i, this)) {
      //     arr[temp] = item;
      //     temp++;
      //   }
      // }
      // return arr;

      let newArr = []
      // 对当前数组进行迭代;this的指向是数组本身
      for (let i = 0; i < this.length; i++) {
        // this[i] 是指当前的循环项
        if (cb(this[i], i, this)) { // 当前元素，当前索引，对应数组
          // 满足条件，给 newArr添加一个元素
          newArr.push(this[i]);
        }
      }
      // 循环结束，返回新的数组
      return newArr;
    }
      const arr = [11, 17, 23, 34, 45]
      const newArr =  arr.myFilter(item => item > 17)
      console.log(newArr);
  </script>
</body>

</html>